package plannegocio.web;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import plannegocio.excepcion.DAOExcepcion;
import plannegocio.modelo.Categoria;
import plannegocio.modelo.PlanNegocio;
import plannegocio.negocio.GestionCategoria;
import plannegocio.negocio.GestionPlannegocios;

@Controller
public class CategoriaController {

	@RequestMapping(value = "/listarcategoria")
	protected ModelAndView ListarPlanes_xSabio(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		
		String criterio = request.getParameter("txtfiltro");
		System.out.println(criterio);
		System.out.println("Categoria");
		Collection<Categoria> listado = null;
		
		
		if (criterio != null) {
			GestionCategoria negocio = new GestionCategoria();
			listado = negocio.BuscarCategoria(criterio);
			System.out.println(listado.size());
		}
		
		return new ModelAndView("CategoriaListar", "CATEGORIA", listado);
	}
	
	@RequestMapping(value = "/nueva_categoria", method = RequestMethod.GET)
	protected ModelAndView nuevo_emprendedor(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		return new ModelAndView("CategoriaRegistrar");
	}
	
	@RequestMapping(value = "/grabar_categoria", method = RequestMethod.POST)	
	protected ModelAndView ingresar_categoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map<String, Object> contactMap = new HashMap<String, Object>();
		GestionCategoria negocio= new GestionCategoria();
		
		System.out.println("Registro Categoria");
		
		try {
			negocio.insertar_categoria(request.getParameter("descripcion"));
		} catch (DAOExcepcion e) {
			Categoria cat = new Categoria();
			
			cat.setDescripcion(request.getParameter("descripcion"));
			
			contactMap.put("mensaje", e.getMessage());
			contactMap.put("objCategoria", cat);
			
			return new ModelAndView("CategoriaRegistrar",contactMap);
		}
		return new ModelAndView("redirect:listarcategoria.html?txtfiltro=");
	}
	
	@RequestMapping(value = "/editarCategoria", method = RequestMethod.GET)
	protected ModelAndView editar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Categoria cat = new Categoria();
		GestionCategoria negocio = new GestionCategoria();
		Collection<Categoria> listado = null;
		
		listado=negocio.BuscarCategoriaId(Integer.parseInt(request.getParameter("id")));
		
		for (Categoria e : listado) {
			cat.setCategoriaPlanID(e.getCategoriaPlanID());
			cat.setDescripcion(e.getDescripcion());
			cat.setEstado(e.getEstado());
		}
		
		return new ModelAndView("CategoriaEditar", "CATEGORIASEN", cat);
	}
	
	@RequestMapping(value = "/updateCategoria", method = RequestMethod.POST)
	protected ModelAndView modificarCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("actualizarCategoria");
		
		GestionCategoria negocio= new GestionCategoria();
		Categoria cat = new Categoria();
		
		cat.setCategoriaPlanID(Integer.parseInt(request.getParameter("txtId")));
		System.out.println(cat.getCategoriaPlanID());
		cat.setDescripcion(request.getParameter("txtDescripcion"));
		System.out.println(cat.getDescripcion());
		
		try {
			negocio.ActualizarCategoria(cat.getCategoriaPlanID(), cat.getDescripcion());
		} catch (DAOExcepcion e) {
			return new ModelAndView("CategoriaEditar");
		}

		return new ModelAndView("redirect:listarcategoria.html?txtfiltro=");
	}
	
	
	@RequestMapping(value = "/eliminarCategoria", method = RequestMethod.GET)
	protected ModelAndView eliminarCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Categoria cat = new Categoria();
		GestionCategoria negocio = new GestionCategoria();
		Collection<Categoria> listado = null;
		
		listado=negocio.BuscarCategoriaId(Integer.parseInt(request.getParameter("id")));
		
		for (Categoria e : listado) {
			cat.setCategoriaPlanID(e.getCategoriaPlanID());
			cat.setDescripcion(e.getDescripcion());
			cat.setEstado(e.getEstado());
		}
		
		return new ModelAndView("CategoriaEliminar", "CATEGORIASEN", cat);
	}
	
	@RequestMapping(value = "/deleteCategoria", method = RequestMethod.POST)
	protected ModelAndView deleteCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("eliminarCategoria");
		
		GestionCategoria negocio= new GestionCategoria();
		Categoria cat = new Categoria();
		
		cat.setCategoriaPlanID(Integer.parseInt(request.getParameter("txtId")));
		System.out.println(cat.getCategoriaPlanID());
		cat.setDescripcion(request.getParameter("txtDescripcion"));
		System.out.println(cat.getDescripcion());
		
		try {
			//negocio.ActualizarCategoria(cat.getCategoriaPlanID(), cat.getDescripcion());
			negocio.AnularCategoria(cat.getCategoriaPlanID());
		} catch (DAOExcepcion e) {
			return new ModelAndView("CategoriaEliminar");
		}

		return new ModelAndView("redirect:listarcategoria.html?txtfiltro=");
	}
	
	//SUBCATEGORIAS
	
	@RequestMapping(value = "/listarSubCategoria", method = RequestMethod.GET)
	protected ModelAndView SubCategoriaListar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		System.out.println("SUBCATEGORIAS LISTAR");
		Categoria cat = new Categoria();
		GestionCategoria negocio = new GestionCategoria();
		Collection<Categoria> listado = null;
		
		listado=negocio.BuscarSubCategoriaId(Integer.parseInt(request.getParameter("id")));
		
		System.out.println(listado.size());
		
		if(listado.size()==0){
			cat.setCategoriaNivelID(Integer.parseInt(request.getParameter("id")));
			listado.add(cat);
		}
		
		return new ModelAndView("SubCategoriaListar", "SUBCATEGORIAS", listado);
	}
	
	@RequestMapping(value = "/nueva_subcategoria", method = RequestMethod.GET)
	protected ModelAndView nuevo_subcategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map<String, Object> contactMap = new HashMap<String, Object>();
		System.out.println("SUBCATEGORIAS REGISTRAR");
		Categoria cat = new Categoria();
		
		cat.setCategoriaNivelID(Integer.parseInt(request.getParameter("id")));
		System.out.println(cat.getCategoriaNivelID());
		contactMap.put("objSubCategoria", cat);
		return new ModelAndView("SubCategoriaRegistrar",contactMap);
	}
	
	@RequestMapping(value = "/grabar_subcategoria", method = RequestMethod.POST)	
	protected ModelAndView ingresar_subcategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map<String, Object> contactMap = new HashMap<String, Object>();
		GestionCategoria negocio= new GestionCategoria();
		
		System.out.println("Registro SubCategoria");
		
		try {
			negocio.insertar_subcategoria(request.getParameter("descripcion"), Integer.parseInt(request.getParameter("categorianivelid")));
		} catch (Exception e) {
			Categoria cat = new Categoria();
			
			cat.setDescripcion(request.getParameter("descripcion"));
			cat.setCategoriaNivelID(Integer.parseInt(request.getParameter("categorianivelid")));
			
			contactMap.put("mensaje", e.getMessage());
			contactMap.put("objSubCategoria", cat);
			
			return new ModelAndView("SubCategoriaRegistrar",contactMap);
		}
		//return new ModelAndView("SubCategoriaListar");
		return new ModelAndView("redirect:listarSubCategoria.html?id="+ request.getParameter("categorianivelid"));
	}
	
	
	@RequestMapping(value = "/editarSubCategoria", method = RequestMethod.GET)
	protected ModelAndView editarSubCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Categoria cat = new Categoria();
		GestionCategoria negocio = new GestionCategoria();
		Collection<Categoria> listado = null;
		
		listado=negocio.BuscarCategoriaId(Integer.parseInt(request.getParameter("id")));
		System.out.println("Ver Edicion Subcategoria");
		for (Categoria e : listado) {
			cat.setCategoriaPlanID(e.getCategoriaPlanID());
			cat.setDescripcion(e.getDescripcion());
			cat.setEstado(e.getEstado());
			cat.setCategoriaNivelID(e.getCategoriaNivelID());
		}
		
		System.out.println(cat.getCategoriaNivelID());
		
		return new ModelAndView("SubCategoriaEditar", "CATEGORIASED", cat);
	}
	
	@RequestMapping(value = "/updateSubCategoria", method = RequestMethod.POST)
	protected ModelAndView modificarSubCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("actualizarSubCategoria");
		
		GestionCategoria negocio= new GestionCategoria();
		Categoria cat = new Categoria();
		
		cat.setCategoriaPlanID(Integer.parseInt(request.getParameter("txtId")));
		System.out.println(cat.getCategoriaPlanID());
		cat.setDescripcion(request.getParameter("txtDescripcion"));
		System.out.println(cat.getDescripcion());
		
		try {
			negocio.ActualizarSubCategoria(cat.getCategoriaPlanID(), cat.getDescripcion());
		} catch (DAOExcepcion e) {
			return new ModelAndView("SubCategoriaEditar");
		}

		return new ModelAndView("redirect:listarSubCategoria.html?id="+ request.getParameter("txtdependencia"));

	}
	
	
	
	@RequestMapping(value = "/eliminarSubCategoria", method = RequestMethod.GET)
	protected ModelAndView eliminarSubCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Categoria cat = new Categoria();
		GestionCategoria negocio = new GestionCategoria();
		Collection<Categoria> listado = null;
		
		listado=negocio.BuscarCategoriaId(Integer.parseInt(request.getParameter("id")));
		System.out.println("Ver Eliminar Subcategoria");
		for (Categoria e : listado) {
			cat.setCategoriaPlanID(e.getCategoriaPlanID());
			cat.setDescripcion(e.getDescripcion());
			cat.setEstado(e.getEstado());
			cat.setCategoriaNivelID(e.getCategoriaNivelID());
		}
		
		System.out.println(cat.getCategoriaNivelID());
		
		return new ModelAndView("SubCategoriaEliminar", "CATEGORIASEL", cat);
	}
	
	
	@RequestMapping(value = "/deleteSubCategoria", method = RequestMethod.POST)
	protected ModelAndView deleteSubCategoria(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("eliminarCategoria");
		
		GestionCategoria negocio= new GestionCategoria();
		Categoria cat = new Categoria();
		
		cat.setCategoriaPlanID(Integer.parseInt(request.getParameter("txtId")));
		System.out.println(cat.getCategoriaPlanID());
		cat.setDescripcion(request.getParameter("txtDescripcion"));
		System.out.println(cat.getDescripcion());
		
		try {
			negocio.AnularSubCategoria(cat.getCategoriaPlanID());
		} catch (DAOExcepcion e) {
			return new ModelAndView("SubCategoriaEliminar");
		}

		return new ModelAndView("redirect:listarSubCategoria.html?id="+ request.getParameter("txtdependencia"));
	}


}

